#ifndef Console_h__
#define Console_h__

#include <map>
#include <string>
#include <vector>
#include <functional>
#include <list>

using std::map;
using std::string;
using std::vector;
using std::function;
using std::list;

#include "Console/Command.h"

typedef map<string, CommandFunction> FunctionMap;

class Console {
public:
	Console() = default;
	~Console() = default;

private:
	FunctionMap mFunction;
	FunctionMap mDisabled;
public:
	void addFunction(string, CommandFunction);
	void deleteFunction(string);
	void enableFunction(string);
	void disableFunction(string);
	void enableFunction(vector<string>&);
	void disableFunction(vector<string>&);

private:
	list<Command> commandBuffer;
public:
	void queueCommand(string);
	void run();
};

#endif // Console_h__
